home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 June / Macworld (1999-06).dmg / Shareware World / Info / For Developers / MacZoop2.0.sea / MacZoop2.0 / Required Classes / Main.cpp < prev    next >
C/C++ Source or Header  |  1999-02-08  |  2KB  |  99 lines

  1. /*************************************************************************************************
  2. *
  3. *
  4. *            MacZoop 2.0- "the framework for the rest of us"     
  5. *
  6. *
  7. *
  8. *            Main.c    -- start up the app
  9. *
  10. *            DO NOT ALTER OR EDIT THIS FILE. In "ProjectSettings.h" for this project, declare
  11. *                                            your application class name and the macros here
  12. *                                            will expand that definition to do the right thing.
  13. *
  14. *
  15. *            © 1999, Graham Cox
  16. *
  17. *
  18. *
  19. *
  20. *************************************************************************************************/
  21.  
  22.  
  23. #include    "ProjectSettings.h"
  24. #include    "MacZoop.h"
  25.  
  26. // MacZoop prefers to handle its own exceptions when an allocation using <new> fails. Older
  27. // CW versions returned NULL in such circumstances, newer ones throw an exception. Since we
  28. // prefer the old way, we need a way to turn off the newer behaviour, but in a way which works
  29. // for all versions of CodeWarrior, and even other compilers. This macro is used to hide the
  30. // details of doing this. <<< MORE TO DO >>>
  31.  
  32. #if    defined(__MWERKS__)
  33.     #if __MWERKS__ >= 0x2100     // Pro3
  34.         namespace std
  35.         {
  36.             extern char __throws_bad_alloc;
  37.           }
  38.           #define            NOBADALLOCS        std::__throws_bad_alloc = FALSE
  39.       #else
  40.           #if __MWERKS__ >= 0x1000    // Pro1, Pro 2    
  41.             extern char    __throws_bad_alloc;
  42.             #define        NOBADALLOCS        __throws_bad_alloc = FALSE
  43.         #else
  44.             #define        NOBADALLOCS
  45.         #endif
  46.     #endif
  47. #else
  48.     #define        NOBADALLOCS
  49. #endif
  50.  
  51. // if this isn't defined, make a generic application object by default
  52.  
  53. #ifndef APP_CLASS_NAME
  54. #define    APP_CLASS_NAME    ZApplication
  55. #endif
  56.  
  57. // application construction macro- this allows a standard main() function that only requires
  58. // the user to name their application class in their project settings and bingo- less error
  59. // prone than the MacZoop 1.x method.
  60.  
  61. #define    MAKE_USER_APPLICATION    new APP_CLASS_NAME()
  62.  
  63. // application header macro- makes sure the correct header file is automatically included
  64.  
  65. #include HEADER( APP_CLASS_NAME )
  66.  
  67. void    main( void );
  68.  
  69.  
  70. // Main function:
  71.  
  72. void    main( void )
  73. {
  74.     // we'll do the exception handling, thankyou very much....
  75.     
  76.     NOBADALLOCS;
  77.     
  78.     // now... do it!!!
  79.  
  80.     try
  81.     {
  82.         FailNIL( gApplication = MAKE_USER_APPLICATION );
  83.         
  84.         RunApplication();
  85.     }
  86.     catch(...)
  87.     {
  88.         // bloody hellfire!
  89.         
  90.         SysBeep( 1 );
  91.         SysBeep( 1 );
  92.         SysBeep( 1 );
  93.         
  94.         // make a feeble attempt to clean up gracefully...
  95.         
  96.         if ( gApplication )
  97.             ForgetObject( gApplication );
  98.     }
  99. }